package com.satan.novel.user.service;

import com.satan.novel.book.dto.req.BookCommentReqDto;
import com.satan.novel.book.dto.req.UserCommentPageReqDto;
import com.satan.novel.book.dto.resp.UserCommentRespDto;
import com.satan.novel.common.resp.PageRespDto;
import com.satan.novel.common.resp.RestResp;
import com.satan.novel.user.dto.req.UserInfoUptReqDto;
import com.satan.novel.user.dto.req.UserLoginReqDto;
import com.satan.novel.user.dto.req.UserPwdUptReqDto;
import com.satan.novel.user.dto.req.UserRegisterReqDto;
import com.satan.novel.user.dto.resp.UserInfoRespDto;
import com.satan.novel.user.dto.resp.UserLoginRespDto;
import com.satan.novel.user.dto.resp.UserRegisterRespDto;

import java.util.List;

public interface UserService {
    /**
     * 用户注册
     *
     * @param dto 注册参数
     * @return JWT
     */
    RestResp<UserRegisterRespDto> register(UserRegisterReqDto dto);

    /**
     * 用户登录
     *
     * @param dto 登录参数
     * @return JWT + 昵称
     */
    RestResp<UserLoginRespDto> login(UserLoginReqDto dto);

    /**
     * 发布评论
     *
     * @param dto
     * @return
     */
    RestResp<Void> publishComment(BookCommentReqDto dto);

    /**
     * 批量查询用户信息
     *
     * @param userIds
     * @return
     */
    RestResp<List<UserInfoRespDto>> listUserInfoByIds(List<Long> userIds);

    /**
     * 更新评论
     *
     * @param id
     * @param content
     * @return
     */
    RestResp<Void> updateComment(Long id, String content);

    /**
     * 删除评论
     *
     * @param id
     * @return
     */
    RestResp<Void> deleteCommnet(Long id);

    /**
     * 用户信息查询
     *
     * @param userId
     * @return
     */
    RestResp<UserInfoRespDto> getUserInfo(Long userId);

    /**
     * 用户信息更新
     *
     * @param dto
     * @return
     */
    RestResp<Void> updateUserInfo(UserInfoUptReqDto dto);

    /**
     * 用户密码更新
     *
     * @param dto
     * @return
     */
    RestResp<Void> updateUserPwd(UserPwdUptReqDto dto);

    RestResp<PageRespDto<UserCommentRespDto>> listUserComments(UserCommentPageReqDto dto);
}
